export default class RGB {
  constructor(private i2c:any, private Addr = 0x0d) {}
  /*RGB灯相关变量*/
  private rgb = {
    RGB_Off: 0x07,  // 关闭rgb灯
    RGB_EFFECT: 0x04,  // rgb灯特效
    RGB_SPEED: 0x05,  // rgb灯变化速度
    RGB_COLOR: 0x06,  // rgb灯颜色
    MAX_LED: 3,  //rgb灯数量最大值
    BEFORE_RGB_COLOR: 1  // 记录之前灯光颜色,默认为绿色
  }
  /*RGB灯相关函数*/
  // 设置RGB灯函数 num 指的是哪个灯，0 为第一个灯，1 为第二个灯，2 为第三个 灯，如果大于等于 3，则所有灯同时设置。R，G，B 值的取值范围都为 0~255。
  // 暂有参数问题 无法使用 改为私有
  private setRGB(num:number, r=255,g=255,b=255) {
    this.i2c.openPromisified(1).then((bus:any) => {
      // 如果超出灯的设置限制则为默认设置
      if (num >= this.rgb.MAX_LED) {
        bus.writeByte(this.Addr, 0x00, 0xff)
        bus.writeByte(this.Addr, 0x00, r&0xff)
        bus.writeByte(this.Addr, 0x00, g&0xff)
        bus.writeByte(this.Addr, 0x00, b&0xff)
      } else if (num >= 0) {
        bus.writeByte(this.Addr, 0x00, num&0xff)
        bus.writeByte(this.Addr, 0x00, r&0xff)
        bus.writeByte(this.Addr, 0x00, g&0xff)
        bus.writeByte(this.Addr, 0x00, b&0xff)
      }
    })
  }
  // 启动亮灯
  public SetupRGB(effect:number = 1, speed:number = 1, color:number = 1) {
    this.i2c.openPromisified(1).then((bus:any) => {
      // 设置RGB灯特效函数  0 流水灯，1 呼吸灯,2 跑马灯，3 彩虹灯，4 炫彩灯。
      if (effect >= 0 && effect <= 4) {
        bus.writeByte(this.Addr, this.rgb.RGB_EFFECT, effect&0xff)
      }
      // RGB 灯切换速度。1 低速，2 中速（默认），3 高速，如果不设置 默认为中速
      if (speed >= 1 && speed <= 3) {
        bus.writeByte(this.Addr, this.rgb.RGB_SPEED, speed&0xff)
      }
      // 设置 RGB 灯特效中流水灯和呼吸灯的颜色，0 红色，1 绿色（默认），2 蓝色，3 黄色，4 紫色，5 青色，6 白色。如果不设置默认为绿色。
      if (color >= 0 && color <= 6) {
        bus.writeByte(this.Addr, this.rgb.RGB_COLOR, color&0xff)
      }
    })
  }
}